// 1. 需要将导入
import http from 'wechat-http'

// 2. 添加 baseUrl 配置基地址
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截
http.intercept.request = (params) => {
  // console.log(params, 111111)
  // 1. 获取token
  const token = getApp().token
  // 2. 判断是否有token
  if (token) {
    // 给请求头添加 Authorization
    params.header = {
      Authorization: `Bearer ${token}`,
      ...params.header
    }
  }
  // 这里必须要有返回
  return params
}

// 3. 配置响应拦截器
http.intercept.response = async (res) => {
  // console.log(res, 22222)
  // 如果 res.data.code 的值是401 说明是 token失效 同时如何我们访问的 url地址中有 /refreshToken 那就说 refreshToken 也过期了
  if (res.data.code === 401) {
    // 如果访问的是 /refreshToken
    if (res.config.url.includes('/refreshToken')) {
      // 提示用户重新登录
      wx.utils.toast('请重新登录')
      // 跳转登录页面
      // 页面栈 访问的路径 数组 数组的最后一个元素是当前访问页面
      const currentPages = getCurrentPages()
      // 获取最后一个页面的路径
      const lastPage = currentPages[currentPages.length - 1].route
      // console.log(lastPage)
      // 跳转到登录页面 并且携带参数
      return wx.redirectTo({
        url: '/pages/login/index?redirect=' + lastPage
      })
    }

    // 代表token失效
    // 删除本地存储里
    // 利用 refreshToken 获取新的 token
    const app = getApp()

    // 如果 app.r_token 没有 下面的代码就不要执行了
    if (!app.r_token) return

    const res2 = await http({
      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: `Bearer ${app.r_token}`
      }
    })
    // console.log(res2)
    app.setToken(res2.data.token, res2.data.refreshToken)

    // 需要借助于 存储到本地存储里面的 token 发送请求
    // 1. 处理 请求头
    res.config.header = {
      Authorization: `Bearer ${wx.getStorageSync('token')}`
    }
    // 重新调用 http 方法
    return http(res.config)
  } else if (res.data.code !== 10000) {
    // 处理业务失败的问题
    wx.showToast({
      title: res.data.message,
      mask: true,
      icon: 'error'
    })
    return Promise.reject(res)
  }
  // console.log(res, 222222)
  return res.data
}

// 给 wx 全局对象添加属性
wx.http = http
// 导出
export default http
